/*
 * Led_Bsp.c
 *
 *  Created on: Dec 3, 2020
 *      Author: Administrator
 */



#include	"main.h"
#include	"stm32h7xx_hal.h"
#include	"Led_Bsp.h"


static const gpio_pin_t led_pins[] = {
		{LED3_PORT, LED3_PIN, 0},
		{LED2_PORT, LED2_PIN, 0},
		{LED4_PORT, LED4_PIN, 0},
		{LED5_PORT, LED5_PIN, 0},
		{LED1_PORT, LED1_PIN, 0},
		{LED6_PORT, LED6_PIN, 0},
		{LED7_PORT, LED7_PIN, 0}
};


void led_init(void)
{
//	GPIO_InitTypeDef GPIO_InitStruct = {0};
//	  GPIO_InitStruct.Pin = GPIO_PIN_15;
//	  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
//	  GPIO_InitStruct.Pull = GPIO_NOPULL;
//	  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
//	  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
//
//	  GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
//	  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
//	  GPIO_InitStruct.Pull = GPIO_NOPULL;
//	  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
//	  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}

void led_on(uint16_t ledNo)
{
	uint16_t ledIdx;
	if((ledNo <= LED_MAX_NO) && (ledNo >= 1))
	{
		ledIdx = ledNo - 1;
		HAL_GPIO_WritePin(led_pins[ledIdx].port,led_pins[ledIdx].pin,LED_ON);
	}
}

void led_off(uint16_t ledNo)
{
	uint16_t ledIdx;
	if((ledNo <= LED_MAX_NO) && (ledNo >= LED_MIN_NO))
	{
		ledIdx = ledNo - 1;
		HAL_GPIO_WritePin(led_pins[ledIdx].port,led_pins[ledIdx].pin,LED_OFF);
	}
}


void led_offall(void)
{
	uint16_t ledIdx;
	for(ledIdx=LED_MIN_NO;ledIdx<=LED_MAX_NO;ledIdx++)
	{
		led_off(ledIdx);
	}
}


void led_toggle(uint16_t ledNo)
{
	uint16_t ledIdx;
	if((ledNo <= LED_MAX_NO) && (ledNo >= 1))
	{
		ledIdx = ledNo - 1;
		HAL_GPIO_TogglePin(led_pins[ledIdx].port,led_pins[ledIdx].pin);
	}
}


#define		LED_SYS_RUN_OFF_CNT			1
#define		LED_SYS_RUN_MAX_CNT			10


#define		LED_SPAN		250



void 	led_process(void)
{
	static	uint32_t	led_stamp;
	static  uint16_t	led_dptr = LED_MIN_NO;
	if(HAL_GetTick()-led_stamp >= LED_SPAN)
	{
		led_stamp = HAL_GetTick();
//		HAL_GPIO_TogglePin(MCU_LED_GPIO_Port, MCU_LED_Pin);
//		led_toggle(LED_SYS_RUN_NO);
//		led_toggle(2);
		led_offall();

		led_on(led_dptr);
		led_dptr++;
		if(led_dptr>LED_MAX_NO)
		{
			led_dptr = LED_MIN_NO;
		}
	}
}








#define		LED_TEST_SPAN			50

void led_test(void)
{
	static uint32_t	led_test_stamp = 0;
	static uint16_t led_cnt = 0;

	if(HAL_GetTick() - led_test_stamp >= LED_TEST_SPAN)
	{
		led_test_stamp = HAL_GetTick();

		led_cnt ++;
		led_toggle(led_cnt);
		if(led_cnt >= 6)
		{
			led_cnt = 0;
		}
	}
}





